首先,两个数不互质同理于两个数的质因子集合没有交集。考虑一下 $n\leq 30$ 的情况,可以发现这里面的质数也只有 $10$ 个,那么我们将每一个寿司分解质因数,然后将质因子压成一个状态。
设 $f[s1][s2]$ 表示小 $\rm{G}$ 吃了的寿司的状态为 $s1$ ,小 $\rm{W}$ 吃了的寿司的状态为 $s2$ 时的方案数。转移的时候枚举寿司,分别判断两个人是否能吃然后转移即可。
1 |
|
可以知道 $n\leq 500$ 的时候,每一个数最多带上一个大于等于 $23$ 的质因子。我们首先将所有的寿司分为两类:带了大于等于 $23$ 的质因子的和没带的。
没带的显然可以向上面那样转移。那么带了的呢?这个显然不能压缩吧。
我们考虑将带了同样的大于等于 $23$ 的质因子的分成一组,这一组要不小 $\rm{G}$ 吃小 $\rm{W}$ 不吃,要不小 $\rm{W}$ 吃小 $G$ 不吃。分别讨论即可。
设 $f1[s1][s2]$ 表示这一组是小 $\rm{G}$ 吃时,小 $\rm{G}$ 吃了的寿司的状态为 $s1$ , 小 $\rm{W}$ 吃了的寿司的状态为 $s2$ 时的方案数。同理,设 $f2[s1][s2]$ 表示这一组是小 $\rm{W}$ 吃时,小 $\rm{G}$ 吃了的寿司的状态为 $s1$ , 小 $\rm{W}$ 吃了的寿司的状态为 $s2$ 时的方案数。分别转移就好了。
1 | for(int i=pos+1;i<=n;++i) { /*枚举这些寿司*/ |
Code:
1 |
|
本文标题:【题解】 [NOI2015]寿司晚宴 状压DP loj2131
文章作者:Qiuly
发布时间:2019年05月01日 - 00:00
最后更新:2019年05月05日 - 09:22
原始链接:http://qiulyblog.github.io/2019/05/01/[题解]loj2131/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。